package br.ufrn.acqua

import org.codehaus.groovy.grails.web.json.JSONObject;

import grails.converters.JSON;
import groovyx.net.http.*
import static groovyx.net.http.Method.*


class MarcadorController {

	def recuperar(){
		def marcadores = Marcador.list(sort:"id", order:"asc")

		render(contentType: 'text/json') {
			[
				status:"OK",
				marcadores:marcadores.collect{
					[
						id: it.id,
						latitude:it.latitude,
						longitude:it.longitude,
						tipo:it.tipo
					]
				}]
		}
	}

	def iniciarMarcacao(){

		double latitude = Math.round(params.latitude.toDouble() * 100000) / 100000 ;
		double longitude = Math.round(params.longitude.toDouble() * 100000) / 100000 ;

		Marcador marcador = new Marcador(params);
		marcador.latitude = latitude
		marcador.longitude = longitude

		def http = new HTTPBuilder( 'https://maps.googleapis.com' )
		// perform a GET request, expecting JSON response data
		http.request( GET, groovyx.net.http.ContentType.JSON ) {
			uri.path = '/maps/api/geocode/json'
			uri.query = [ latlng: params.latitude+","+params.longitude,
				sensor:false,
				key:"AIzaSyBbAhjUtGTYB8So9Bc70aPlH1k4e4Ag0J8" ]

			// response handler for a success response code:
			response.success = { resp, json ->
				//println resp.statusLine

				int i = 0
				if(json.results.address_components[2].long_name.size() > 3)
					i = 1

				marcador.cidade = json.results.address_components[2].long_name[i++]
				marcador.estado = json.results.address_components[2].long_name[i++]
				marcador.pais = json.results.address_components[2].long_name[i++]
			}
			// handler for any failure status code:
			response.failure = { resp ->
				println "Unexpected error: ${resp.statusLine.statusCode} : ${resp.statusLine.reasonPhrase}"
			}
		}

		render(template: "form",model:[marcador:marcador])
	}


	def inserir(){
		def marcador = new Marcador(params);

		double latitude = params.latitude.toDouble();
		double longitude = params.longitude.toDouble();

		marcador.latitude = latitude
		marcador.longitude = longitude
		marcador.usuarioCadastro = session.usuarioLogado
		marcador.dataCadastro = new Date()
		marcador.classificacao = 0L;
		
		marcador.save(flush:true);
		
		flash.message = "Marcador Inserido com Sucesso!" 
		
		redirect(controller: "index", action: "index")
	}
	
	def preAlterar(){
		def marcador = Marcador.get(params.id)
		
		if(marcador.usuarioCadastro.id == session.usuarioLogado.id){
			render(view:"form",model:[marcador:marcador])
		}
	}
	
	def alterar(){
		def marcador = Marcador.get(params.id);

		marcador.local = params.local;
		marcador.descricao = params.descricao;
		marcador.tipo = params.tipo;
		
		marcador.save(flush:true);
		
		flash.message = "Marcador alterado com sucesso!"
		
		redirect(controller: "index", action: "index")
	}
	
	def remover(){
		def marcador = Marcador.get(params.id)
		
		if(marcador.usuarioCadastro.id == session.usuarioLogado.id){
			render(view:"form",model:[marcador:marcador])
		}
		
		Marcador.withTransaction { status ->
			
			marcador.comentarios.each { it ->
				it.delete();
			}
			
			marcador.delete();
		}
		
		
		flash.message = "Marcador removido com Sucesso!"
		
		redirect(controller: "index", action: "index")
	}
	
	def view(){

		def marcador = Marcador.get(params.id)
		
		marcador.comentarios.sort{
			it.data
		}
		
		render(template: "view",model:[marcador:marcador])
	}
	
	def ver(){
		def idMarcador = params.id
		
		render(view:"/index",model:[idMarcador:idMarcador]);	
	}
}
